function conver_to_string() {
	var num = 8;
	var numString = num.toString();
	numString; // returns "8"
	var result = true;
	var resultString = result.toString();
	console.log(resultString); // returns "true"

	var num = 16
	var num = 16;
	console.log(num.toString()); // "16" 默认是10进制
	console.log(num.toString(10)); // "16"
	console.log(num.toString(2)); // "10000"
	console.log(num.toString(8)); // "20"
	console.log(num.toString(16)); // "10"

	var num1 = 8;
	var num2 = String(num1);
	console.log(num2); // returns "8"
	var result = true;
	var result1 = String(result);
	result1; // returns "true"
	console.log(result1)


	var num1 = 16;
	var num2 = num1 + 'a';
	console.log(num2)
}

function conver_to_num() {
	var num1 = Number(true);
	num1; // true 返回 1，false 返回 0
	console.log(num1)

	var num2 = Number(undefined);
	num2; // 返回 NaN
	console.log(num2)
	var num3 = Number(null);
	num3; // 返回 0

	var num4 = Number('syl');
	num4; // 返回 NaN

	var num5 = Number('   ');
	num5; // 如果是空字符串返回 0

	var num6 = Number(123);
	num6; // 返回123，如果是数字型的字符，返回数字

	var num7 = Number('123abc');
	num7; // 返回 NaN
	console.log(num7)

	var num5 = parseInt('0xA');
	num5; // 返回 10

	parseFloat('10.000'); // returns 10   如果解析的内容里只有整数，解析成整数。
	parseFloat('10.01'); // returns 10.01
}


function conver_to_bool() {
	Boolean(123); // returns true
	Boolean('abc'); // returns true
	Boolean(null); // returns false
	Boolean(undefined); // returns false
	Boolean(NaN); // returns false
	Boolean(0); // returns false
	Boolean(''); // returns false
	Boolean(false); // returns false
	Boolean('false'); // returns true
	Boolean(-1); // returns true

	var message;
	if (message) {
		//会自动把 message 转换成 false，最后打印结果为：我很好
		console.log('你好啊');
	} else {
		console.log('我很好');
	}
}

function if_in_js() {
	if (3 > 2) {
		console.log('我真帅');
	} else {
		console.log('不可能');
	}

	var d = new Date().getDay();
	if (d == 0) {
		console.log('今天星期天');
	} else if (d == 1) {
		console.log('今天星期一');
	} else if (d == 2) {
		console.log('今天星期二');
	} else {
		console.log('好多啊，我不想写了');
	}
}

function switch_in_js() {
	var d = new Date().getDay();
	switch (d) {
		case 0:
			console.log('今天星期天');
			break;
		case 1:
			console.log('今天星期一');
			break;
		case 2:
			console.log('今天星期二');
			break;
		case 3:
			console.log('今天星期三');
			break;
		case 4:
			console.log('今天星期四');
			break;
		case 5:
			console.log('今天星期五');
			break;
		default:
			console.log('今天星期六');
			break;
	}
}

function for_in_js() {
	for (var i = 1; i <= 5; i++) {
		if (i == 3) {
			continue;
		}
		console.log(i);
	}
}

function while_in_js() {
	var i = 1;
	while (i <= 5) {
		i++;
		if (i == 3) {
			continue
		}
		console.log("while in js:" + i);
	}
}

function array_in_js() {
	var a = [1, 2, 3];
	var b = [4, 5, 6];
	var c = ['one', 'two', 'three'];
	console.log(a.concat(b, c)); // 打印结果为：[1, 2, 3, 4, 5, 6, "one", "two", "three"]
	console.log(c.toString())
	console.log(c.join('.'))
}



function date_in_js() {
	/*
	Date()：返回当日的日期和时间（输出的是中国标准时间）。
	getDate()：从 Date 对象返回一个月中的某一天 (1 ~ 31)。
	getDay()：从 Date 对象返回一周中的某一天 (0 ~ 6)。
	getMonth()：从 Date 对象返回月份 (0 ~ 11)。
	getFullYear()：从 Date 对象以四位数字返回年份。
	getHours()：返回 Date 对象的小时 (0 ~ 23)。
	getMinutes()：返回 Date 对象的分钟 (0 ~ 59)。
	getSeconds()：返回 Date 对象的秒数 (0 ~ 59)。
	getMilliseconds()：返回 Date 对象的毫秒(0 ~ 999)。
	*/
	date = new Date()
	console.log("今天是" + parseInt(date.getMonth() + 1) + "月" + date.getDate() + "日") // 返回整数，如果当前是9月25，则返回25
	console.log("今天是星期" + date.getDay()) // 如果当前是星期三，则返回3
	console.log(date)
	console.log(String(date))
}

function date_formater_01() {
	// https://www.jb51.net/article/72978.htm##1
	// 对Date的扩展，将 Date 转化为指定格式的String
	// 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符， 
	// 年(y)可以用 1-4 个占位符，毫秒(S)只能用 1 个占位符(是 1-3 位的数字) 
	// 例子： 
	// (new Date()).Format("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 
	// (new Date()).Format("yyyy-M-d h:m:s.S")  ==> 2006-7-2 8:9:4.18 
	Date.prototype.Format = function(fmt) { //author: meizz 
		var o = {
			"M+": this.getMonth() + 1, //月份 
			"d+": this.getDate(), //日 
			"h+": this.getHours(), //小时 
			"m+": this.getMinutes(), //分 
			"s+": this.getSeconds(), //秒 
			"q+": Math.floor((this.getMonth() + 3) / 3), //季度 
			"S": this.getMilliseconds() //毫秒 
		};
		if (/(y+)/.test(fmt)) fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "").substr(4 - RegExp.$1.length));
		for (var k in o)
			if (new RegExp("(" + k + ")").test(fmt)) fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k]) :
				(("00" + o[k]).substr(("" + o[k]).length)));
		return fmt;
	}
	var time1 = new Date().Format("yyyy-MM-dd");
	var time2 = new Date().Format("yyyy-MM-dd hh:mm:ss");
	console.log(time1);
	console.log(time2);
}

function date_formater_02(d) {
	if (!d instanceof Date) {
		return;
	}
	var year = d.getFullYear(),
		month = d.getMonth() + 1,
		date = d.getDate(),
		hour = d.getHours(),
		minute = d.getMinutes(),
		second = d.getSeconds();
	month = month < 10 ? '0' + month : month;
	date = date < 10 ? '0' + date : date;
	hour = hour < 10 ? '0' + hour : hour;
	minute = minute < 10 ? '0' + minute : minute;
	second = second < 10 ? '0' + second : second;
	return (
		year +
		'/' +
		month +
		'/' +
		date +
		' ' +
		hour +
		':' +
		minute +
		':' +
		second
	);
}


function object_in_js() {
	var student = new Object();
	(student.name = 'zhangsan'),
	(student.age = 18),
	(student.gender = 'male'),
	(student.sayHi = function() {
		console.log('hi,my name is ' + this.name);
	});
	student.sayHi()
	student.sex = "女"
	console.log(student.name + student.sex)
}

function main() {
	conver_to_string();
	conver_to_num();
	conver_to_bool();
	if_in_js();
	switch_in_js();
	for_in_js();
	while_in_js();
	array_in_js();
	date_in_js();
	date_formater_01();
	object_in_js();
	console.log(date_formater_02(new Date()));
}

async function test1() {
	console.log('start test1');
	console.log(await test2());
	console.log('end test1');
}
async function test2() {
	console.log('test2');
	return await 'return test2 value'
}
test1();
console.log('start async');
setTimeout(() => {
	console.log('setTimeout');
}, 0);
new Promise((resolve, reject) => {
	console.log('promise1');
	resolve();
}).then(() => {
	console.log('promise2');
});
console.log('end async');


// TODO: Web API  https://www.lanqiao.cn/courses/1238/learning/?id=9789


// TODO: 值类型和引用类型  https://www.lanqiao.cn/courses/1238/learning/?id=9802
// TODO: 面向对象编程   https://www.lanqiao.cn/courses/1238/learning/?id=9803
// TODO: 函数进阶   https://www.lanqiao.cn/courses/1238/learning/?id=9804
// TODO: 使用代码把js文件压缩成圣诞树   https://www.lanqiao.cn/courses/1326/learning/?id=11036
main();
(function() {
	console.log('自调用函数');
})();
